const rl = require('readline').createInterface({ input: process.stdin })

/*

0 9 2 4 8 1 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
7 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
0 4 5 2 7 6 8 3 1


1 9 2 4 8 0 7 6 3
4 1 3 7 6 2 9 8 5
8 6 7 3 5 9 4 1 2
6 2 4 1 9 5 3 7 8
0 5 9 8 4 3 1 2 6
1 3 8 6 2 7 5 9 4
2 7 1 5 3 8 6 4 9
3 8 6 9 1 4 2 5 7
0 4 5 2 7 6 8 3 1


0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

 */

let line;
let arr = [];

rl.on('line', function (line) {
	if (arr.length < 9) {
		const sub = line.trim().split(' ').map(Number)
		arr.push(sub);
	} else {
		console.log(arr, '====')
	}
})

rl.on('close', () => {

})

// while(line = readline()) {
// 	arr.push(line.trim().split(' ').map(Number));
// }
//


// sudu(arr, 0, 0);

// for(let i = 0;i < 9;i++){
// 	console.log(arr[i].join(' '));
// }

function sudu(arr,i,j){ // 以行为单位进行扫描，查找一行中的0
	if(i > 8){
		return true;
	}
	
	if (arr[i][j] != 0) {
		if (j < 8 && sudu(arr, i, j+1)) {
			return true;
		} else if(j >= 8 && sudu(arr, i+1, 0)) {
			return true;
		}
	} else {
		for (let num = 1;num <= 9;num++) {
			if (check(arr,i,j,num)) {
				arr[i][j] = num; // 本来置为num
				if (j < 8 && sudu(arr, i, j+1)) {
					return true;
				} else if(j >= 8&&sudu(arr, i+1, 0)){
					return true;
				} else {
					arr[i][j] = 0; //之后的其他地方有重复，所以不满足，重新置为0
				}
			}
		}
	}
	
	return false;
}

function check(arr,i,j,num){ // 每一行、每一列、每一个粗线宫内的数字均含1-9，并且不重复。
	for (var k = 0; k < 9; k ++) {
		if(arr[i][k] == num) return false;
		if(arr[k][j] == num) return false;
	}
	for(var p = Math.floor(i/3)*3;p < Math.floor(i/3+1)*3;p++){
		for(var q = Math.floor(j/3)*3;q < Math.floor(j/3+1)*3;q++){
			if(arr[p][q] == num){
				return false;
			}
		}
	}
	return true;
}
